#include <iostream>
#include <cstdio>
#include <pthread.h>
#include <unistd.h>

// 如果主线程不想再关心新线程，而是当新线程结束的时候，让它自己释放？？
//  设置新现场成为分离状态
// 技术层面：线程默认是需要被等待的，joinable。如果不想让主线程等待新线程。
//  想让新线程结束之后自己退出。设置为分离状态（!joinable or detach） //TO DO
// 理解层面：线程分离，主分离新，新的把自己分离。
//  分离的线程依旧在进程的地址空间中进程的所有资源被分离的线程依然可以访问可以操作。
// 主不等待新线程。

void *start_routine(void *args)
{
    // pthread_detach(pthread_self());
    int cnt = 5;
    while (cnt--)
    {
        fprintf(stdout, "新线程名字：%ld\n", pthread_self());
        sleep(1);
    }
    return nullptr;
}

int main()
{
    pthread_t tid;
    int n = pthread_create(&tid, nullptr, start_routine, (void *)"thread-1");

    // pthread_cancel(tid);
    // std::cout << "新线程被取消了" << std::endl;

    pthread_detach(tid);
    std::cout << "新线程被分离了" << std::endl;

    int cnt = 5;
    while (cnt--)
    {
        fprintf(stdout, "main线程名字：%ld\n", pthread_self());
        sleep(1);
    }

    void *ret = nullptr;
    n = pthread_join(tid, &ret);
    if (n != 0)
    {
        std::cout << "pthread_join error" << std::endl;
    }
    else
    {
        std::cout << "pthread_join success" << std::endl;
    }

    return 0;
}
